package ws;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import org.orm.PersistentException;

import SOAPVO.LogSOAPVO;

import com.google.gson.Gson;

public class LogSOA {
	
	/**
	 * Busca todos los log
	 * @return
	 * @throws PersistentException
	 */
	public String getTodosLosLog () throws PersistentException {
		
		orm.DAOFactory factory = orm.DAOFactory.getDAOFactory();
		orm.Tp_log[] log;

		long t1 = System.currentTimeMillis();
		log = factory.getTp_logDAO().listTp_logByQuery(null, null);
		insertLog("No recibe parametros","Devuelve todos los Logs", t1,"getTodosLosLog");
		return buscar(log);
	}
	
	/**
	 * Devuelve todos los log
	 * @param arreglo
	 * @return
	 */
	private String buscar(orm.Tp_log[] arreglo) {

		String mensaje=" ";
		int largo=0;	
		Collection<LogSOAPVO> coleccionSoapvo = new ArrayList<LogSOAPVO>();
		largo = arreglo.length;

		if(largo>0){

			for(int i=0;i<largo;i++) {
				LogSOAPVO objeto = LogSOAPVO.crearLogSOAPVO(arreglo[i]);
				coleccionSoapvo.add(objeto);
			}		
			Gson gson = new Gson();
			mensaje = gson.toJson(coleccionSoapvo);

		} else mensaje = "No existen registros;";

		return mensaje;
	}
	
	/**
	 * Metodo que realiza un insert en la tabla Pc_log
	 * @param parametros
	 * @param resultado
	 * @param t1
	 * @param metodo
	 * @throws PersistentException
	 */
	public void insertLog(String parametros, String resultado ,long t1, String metodo) throws PersistentException
	{
		long t2 = System.currentTimeMillis(); //para calcular el tiempo que demoro en buscar los datos
		// Instancia factory
		orm.DAOFactory lDAOFactory = orm.DAOFactory.getDAOFactory();
		//intancia DAO log
		orm.dao.Tp_logDAO logDAO = lDAOFactory.getTp_logDAO(); //para el log
		//Instancia objeto Log
		orm.Tp_log lormPc_log = logDAO.createTp_log(); //para el log
		
		//setear valores para el log		
		Date date = new Date(); 
		DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 
		String hora = dateFormat.format(date); //devuelve la fecha en string con el formato yyyy/MM/dd

		lormPc_log.setL_hora(hora+":"+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds());
		lormPc_log.setL_parametros(parametros);
		lormPc_log.setL_resultado(resultado);
		lormPc_log.setL_tiempo_de_calculo(t2-t1);
		lormPc_log.setL_metodo_con(metodo);
		//termino el setear valores para el log
		logDAO.save(lormPc_log); //guarda los datos en la tabla log
	}

}
